package com.koron.util;

import java.io.*;
import java.nio.charset.Charset;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Util {
	/**
	 * 返回xml内指定的字符集
	 * @param f 文件
	 * @return xml文件的字符集
	 * @throws IOException 文件异常
	 */
	public static String getXmlFileEncode(File f) throws IOException
	{
		String ret = "UTF-8";
		BufferedReader r = new BufferedReader(new FileReader(f));
		String firstLine = r.readLine();
		r.close();
		Pattern p = Pattern.compile("<\\?xml [^>]*encoding=\\\"([^\\\"]*)\\\"[^>]*\\?>");
		Matcher m = p.matcher(firstLine);
		if(m.find())
			return m.group(1);
		return ret;
	}
	/**
	 * 读取文件转换成字符串，文件编码方式设置为 {@link Charset#defaultCharset()}
	 * @param f 文件
	 * @return 文件里的文本
	 */
	public static String fileToString(File f) {
		return fileToString(f,Charset.defaultCharset().name());
	}
	/**
	 * 读取文件转换成字符串
	 * @param f 文件
	 * @param encode 编码方式
	 * @return 文件里的文本
	 */
	public static String fileToString(File f, String encode) {
		StringBuilder sb = new StringBuilder();
		String tmp = null;
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f), encode));
			while ((tmp = br.readLine()) != null)
				sb.append(tmp).append("\n");
			br.close();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	/**
	 * 把字符串转成JAVA的字符串
	 * 回车换成\n反斜杠\换成\\，双引号"换成\"
	 * @param str 原字符串
	 * @return 转换过后的字符串
	 */
	public static String toJavaString(String str)
	{
		String ret = str.replaceAll("\\\\","\\\\\\\\");
		ret = ret.replaceAll("\\\"", "\\\\\\\"");
		ret = ret.replace("\r", "\\r");
		ret = ret.replace("\n", "\\n");
		return ret;
	}
	/**
	 * 从xml根节点中取得属性值
	 * 
	 * @param content
	 * @param key
	 * @return
	 */
	public static String getAttribute(String content,String key) {
		Pattern pattern = Pattern.compile("<\\w*[^>]*" + key + "=\"([^\"]*)\"");
		Matcher m = pattern.matcher(content);
		if (m.find()) {
			return m.group(1);
		}
		return null;
	}
	/**
	 * <pre>
	 * 设置XML根节点的属性值
	 * 如果value是null或空字符串，则移除属性
	 * 如果原来没属性则增加属性
	 * </pre>
	 * 
	 * @param content
	 *            文本
	 * @param key
	 *            属性
	 * @param value
	 *            属性值,为null或空字符串时表示要删除属性
	 * @return
	 */
	public static CharSequence setAttribute(CharSequence content, String key, String value) {
		Pattern pattern = Pattern.compile("<\\w*[^>]*(" + key + "=\"([^\"]*)\")");
		Matcher m = pattern.matcher(content);
		StringBuilder sb = new StringBuilder(content);
		if (m.find()) {
			if (value == null || value.equals(""))
				sb.replace(m.start(1), m.end(1), value);
			else
				sb.replace(m.start(2), m.end(2), value);
			return sb.toString();
		} else if (!"".equals(value)) {
			m = Pattern.compile("<\\w*").matcher(content);
			if (m.find()) {
				sb.insert(m.end(), " " + key + "=\"" + value + "\"");
				return sb;
			}
		}
		return content;
	}
}
